//package com.nifostasky.blog.utils;
//
//import io.minio.MinioClient;
//import io.minio.PutObjectOptions;
//import io.minio.messages.Bucket;
//import lombok.RequiredArgsConstructor;
//import lombok.SneakyThrows;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.nio.charset.StandardCharsets;
//import java.util.List;
//import java.util.Objects;
//
///**
// * minio 工具类 7.0.2版本
// */
//@Slf4j
//@Component
//@RequiredArgsConstructor
//public class MinioOldUtils {
//
//    @Value("${minio.default-bucket-name}")
//    private String defaultBucketName;
//
//    private final MinioClient minioClient;
//
//    /**
//     * 获取全部bucket
//     *
//     * @return all bucket
//     */
//    @SneakyThrows
//    public List<Bucket> getAllBuckets() {
//        return minioClient.listBuckets();
//    }
//
//    /**
//     * 判断 bucket是否存在
//     *
//     * @param bucketName 桶名称
//     * @return true 存在
//     */
//    @SneakyThrows
//    public boolean bucketExists(String bucketName){
//        return minioClient.bucketExists(bucketName);
//    }
//
//    /**
//     * 创建 bucket
//     *
//     * @param bucketName 桶名称
//     */
//    @SneakyThrows
//    public void createBucket(String bucketName){
//        boolean isExist = minioClient.bucketExists(bucketName);
//        if(!isExist) {
//            minioClient.makeBucket(bucketName);
//        }
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param bucketName 桶名称
//     * @param fileName 上传后的文件名称
//     * @param fileAbsolutePath 文件的绝对路径
//     * @return 文件url
//     */
//    @SneakyThrows
//    public String upload(String bucketName, String fileName, String fileAbsolutePath){
//        minioClient.putObject(bucketName, fileName, fileAbsolutePath,null);
//        return getFileUrl(bucketName, fileName);
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param fileName 上传后的文件名称
//     * @param stream 文件输入流
//     * @return 文件url
//     */
//    @SneakyThrows
//    public String upload(String fileName, InputStream stream){
//        this.upload(defaultBucketName, fileName, stream);
//        return getFileUrl(defaultBucketName, fileName);
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param file 文件
//     * @return 文件url
//     */
//    public String upload(MultipartFile file) {
//        final String fileName = file.getOriginalFilename();
//        this.upload(defaultBucketName, file);
//        return this.getFileUrl(defaultBucketName, fileName);
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param bucketName 桶名称
//     * @param file 文件
//     * @return 文件url
//     */
//    public String upload(String bucketName, MultipartFile file) {
//        InputStream is = null;
//        try {
//            is = file.getInputStream();
//            final String fileName = file.getOriginalFilename();
//            this.upload(bucketName, fileName, is);
//            return getFileUrl(bucketName, fileName);
//        }
//        catch(Exception e) {
//            log.error(e.getMessage());
//        }
//        finally {
//            try {
//                if(Objects.nonNull(is)) {
//                    is.close();
//                }
//            } catch(IOException e) {
//                log.error(e.getMessage());
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param bucketName 桶名称
//     * @param fileName 上传后的文件名称
//     * @param stream 文件输入流
//     * @return 文件url
//     */
//    @SneakyThrows
//    public String upload(String bucketName, String fileName, InputStream stream){
//        minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
//        return getFileUrl(bucketName, fileName);
//    }
//
//    /**
//     * 附件下载
//     *
//     * @param fileName 附件名称
//     */
//    @SneakyThrows
//    public void download(String fileName, HttpServletResponse response) {
//        this.download(defaultBucketName, fileName, response);
//    }
//
//    /**
//     * 文件下载
//     *
//     * @param bucketName 桶名称
//     * @param fileName 文件名称
//     */
//    public void download(String bucketName, String fileName, HttpServletResponse response) {
//        InputStream in = null;
//        OutputStream out = null;
//        try {
//            in = minioClient.getObject(bucketName, fileName);
//            int len = 0;
//            byte[] buffer = new byte[1024];
//            out = response.getOutputStream();
//            response.reset();
//            response.addHeader("Content-Disposition",
//                    " attachment;filename=" + new String(fileName.getBytes(), StandardCharsets.ISO_8859_1));
//            response.setContentType("application/octet-stream");
//            while ((len = in.read(buffer)) > 0) {
//                out.write(buffer, 0, len);
//            }
//        } catch (Exception e) {
//            log.error(e.getMessage());
//        } finally {
//            if (in != null){
//                try {
//                    in.close();
//                } catch (Exception e) {
//                    log.error(e.getMessage());
//                }
//            }
//            if (out != null) {
//                try {
//                    out.close();
//                } catch (IOException e) {
//                    log.error(e.getMessage());
//                }
//            }
//        }
//    }
//
//    /**
//     * 删除文件
//     *
//     * @param fileName 文件名称
//     */
//    @SneakyThrows
//    public void delFile(String fileName){
//        this.delFile(defaultBucketName, fileName);
//    }
//
//    /**
//     * 删除文件
//     *
//     * @param bucketName 桶名称
//     * @param fileName 文件名称
//     */
//    @SneakyThrows
//    public void delFile(String bucketName, String fileName){
//        minioClient.removeObject(bucketName, fileName);
//    }
//
//    /**
//     * 获取minio文件的下载地址
//     *
//     * @param fileName 文件名
//     */
//    @SneakyThrows
//    public String getFileUrl(String fileName) {
//        return this.getFileUrl(defaultBucketName, fileName);
//    }
//
//    /**
//     * 获取minio文件的下载地址
//     *
//     * @param bucketName 桶名称
//     * @param fileName 文件名
//     */
//    @SneakyThrows
//    public String getFileUrl(String bucketName, String fileName) {
//        return minioClient.presignedGetObject(bucketName, fileName);
//    }
//
//    /**
//     * 设置桶策略
//     *
//     * @param bucketName 桶名称
//     * @param policy 策略
//     */
//    @SneakyThrows
//    public void setBucketPolicy(String bucketName, String policy) {
//        minioClient.setBucketPolicy(bucketName, policy);
//    }
//}
